// -*- coding: utf-8 -*- 
/**
 * Project: AlgorithmsLearn
 *
 * @author: yanking
 * Create time: 2022-03-07 17:58
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.LeetCodeT.TREE;

import com.DataStruct.Tree.TwoBinaryTree.TreeNode;

import java.util.*;

import static java.util.stream.Collectors.toList;

public class FindSecondMinimumValue {
    /**
     * 为了避免数据重复，使用set存储叶子节点数据
     */
    Set<Integer> ans = new HashSet<>();

    /**
     * 获取特定二叉树的第二小值
     */
    public int findSecondMinimumValue(TreeNode root) {
        // 叶子节点包含所有节点信息
        // 遍历二叉树获取叶子节点信息
        preSearch(root);
        List<Integer> res = ans.stream().sorted().collect(toList());
        return res.size() > 1 ? res.get(1) : -1;
    }

    /**
     * 实现二叉树的先序遍历，遍历的过程中获取二叉树的叶子节点信息
     *
     * @param root
     */
    private void preSearch(TreeNode root) {
        if (root == null) {
            return;
        }
        if (root.left == null && root.right == null) {
            // 当前节点是叶子节点
            ans.add(root.val);
        }
        if (root.left != null) {
            preSearch(root.left);
        }
        if (root.right != null) {
            preSearch(root.right);
        }

    }



}
